Skip to content

feat: Contacts — Address Book, VCF import, Agent linking - #1251

Draft
joepio wants to merge 3 commits into
developfrom
cursor/contacts-feature-9ae2
Draft

feat: Contacts — Address Book, VCF import, Agent linking#1251
joepio wants to merge 3 commits into
developfrom
cursor/contacts-feature-9ae2

Conversation

@joepio

@joepio joepio commented Aug 3, 2026

Copy link
Copy Markdown
Member

Summary

Adds a first-class Contacts feature: ontology (AddressBook + Contact), a query-backed Address Book UI, client-side vCard (.vcf) import for Google Contacts / iCloud / Microsoft exports, and optional linking to Atomic Agents via contactAgent.

Design notes: planning/contacts.md (scopes Milestones 1–2 of the personal-information suite).

Agent vs Contact

Agent Contact
Role Cryptographic actor (did:ad:agent:…) Address-book entry in a Drive
Rights Subject of auth Child under Address Book / Drive hierarchy
Link Optional contactAgent → Agent (does not grant rights)

Contacts are ordinary Loro-backed resources — no ClassExtender; they sync/search like anything else.

What's included

  • Ontology in lib/defaults/contacts.json (bootstrapped via populate.rs)
  • TS types in @tomic/lib dataBrowser ontology
  • Address Book page listing Contacts with useCollection (parent + isA filter), search filter, New Contact, Import vCard
  • Contact page with reachability facts + Agent inline + Edit via existing forms
  • VCF parser + import with UID dedup (create vs update)
  • New Resource buttons + drive contactsFolder standard location
  • Unit tests for Google / Apple / Outlook-style vCards (5 passing)

Demo (manual smoke on /app/dev-drive)

Address Book with imported Jane Doe
Import vCard dialog preview
Contact page reachability

Out of scope (suite plan)

OAuth connectors, CardDAV two-way sync, Person/ContactProfile split.

Test plan

  • VCF unit tests (pnpm test src/views/Contacts/vcf.test.ts)
  • Fresh server (--initialize) indexes Contact / AddressBook (search)
  • Manual: New → Address Book → Import .vcf → Jane Doe listed with email/phone/org
  • Contacts files typecheck clean (repo-wide typecheck still hits pre-existing pairing.test.ts @types/node)
  • Contact → Edit → link Agent via ResourceSelector (classtype wired; not manually clicked in smoke)
  • Re-import same UID updates instead of duplicating

To show artifacts inline, enable in settings.

Open in Web Open in Cursor 

cursoragent and others added 3 commits August 3, 2026 13:14
Introduce AddressBook and Contact as first-class Atomic resources with
optional Agent linking, a query-backed Address Book page, and client-side
vCard import for Google/iCloud/Microsoft exports.

Co-authored-by: Joep Meindertsma <joep@ontola.io>
Guard Address Book rows against unknownSubject, fix dropzone hover
background, and update planning/contacts.md acceptance status.

Co-authored-by: Joep Meindertsma <joep@ontola.io>
Primary email/phone/org already show in the reachability header; the
full emails/telephones/addresses JSON arrays are still editable via Edit.

Co-authored-by: Joep Meindertsma <joep@ontola.io>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants